package com.mars.admin.modules.post.mapper;

import com.mars.admin.modules.post.entity.PostCommentLike;
import com.mybatisflex.core.BaseMapper;
import com.mybatisflex.core.paginate.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 帖子评论点赞Mapper接口
 *
 * @author Mars
 * @version 1.0
 * @date 2025-01-07
 */
@Mapper
public interface PostCommentLikeMapper extends BaseMapper<PostCommentLike> {

    /**
     * 根据评论ID和用户ID查询点赞记录
     *
     * @param commentId 评论ID
     * @param userId 用户ID
     * @return 点赞记录
     */
    PostCommentLike selectByCommentIdAndUserId(@Param("commentId") Long commentId, @Param("userId") Long userId);

    /**
     * 根据评论ID删除所有点赞记录
     *
     * @param commentId 评论ID
     * @return 删除数量
     */
    int deleteByCommentId(@Param("commentId") Long commentId);

    /**
     * 根据评论ID和用户ID删除点赞记录
     *
     * @param commentId 评论ID
     * @param userId 用户ID
     * @return 删除数量
     */
    int deleteByCommentIdAndUserId(@Param("commentId") Long commentId, @Param("userId") Long userId);

    /**
     * 根据用户ID查询点赞记录
     *
     * @param userId 用户ID
     * @param page 分页参数
     * @return 点赞记录列表
     */
    Page<PostCommentLike> selectByUserId(@Param("userId") Long userId, Page<PostCommentLike> page);

    /**
     * 根据评论ID查询点赞记录
     *
     * @param commentId 评论ID
     * @param page 分页参数
     * @return 点赞记录列表
     */
    Page<PostCommentLike> selectByCommentId(@Param("commentId") Long commentId, Page<PostCommentLike> page);

    /**
     * 根据评论ID统计点赞数量
     *
     * @param commentId 评论ID
     * @return 点赞数量
     */
    int countByCommentId(@Param("commentId") Long commentId);

    /**
     * 根据用户ID统计点赞数量
     *
     * @param userId 用户ID
     * @return 点赞数量
     */
    int countByUserId(@Param("userId") Long userId);

    /**
     * 根据用户ID查询点赞的评论ID列表
     *
     * @param userId 用户ID
     * @return 评论ID列表
     */
    List<Long> selectCommentIdsByUserId(@Param("userId") Long userId);

    /**
     * 根据评论ID查询点赞的用户ID列表
     *
     * @param commentId 评论ID
     * @return 用户ID列表
     */
    List<Long> selectUserIdsByCommentId(@Param("commentId") Long commentId);

    /**
     * 检查用户是否对评论点赞
     *
     * @param commentId 评论ID
     * @param userId 用户ID
     * @return 是否点赞
     */
    boolean isLiked(@Param("commentId") Long commentId, @Param("userId") Long userId);

    /**
     * 批量删除用户的点赞记录
     *
     * @param userId 用户ID
     * @return 删除数量
     */
    int deleteByUserId(@Param("userId") Long userId);
} 